Skip to content

HBASE-30012 Upgrade hbase-server to use junit5 Part2#7960

Open
liuxiaocs7 wants to merge 1 commit intoapache:masterfrom
liuxiaocs7:HBASE-29998-1
Open

HBASE-30012 Upgrade hbase-server to use junit5 Part2#7960
liuxiaocs7 wants to merge 1 commit intoapache:masterfrom
liuxiaocs7:HBASE-29998-1

Conversation

@liuxiaocs7
Copy link
Member

@liuxiaocs7 liuxiaocs7 commented Mar 20, 2026

@liuxiaocs7 liuxiaocs7 changed the title HBASE-29998 Upgrade hbase-server to use junit5 HBASE-30012 Upgrade hbase-server to use junit5 Part2 Mar 20, 2026
@liuxiaocs7 liuxiaocs7 requested a review from Copilot March 20, 2026 09:26
Copy link

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR is part of HBASE-30012/HBASE-29998 and continues the hbase-server test migration from JUnit 4 to JUnit 5 (Jupiter), including updating assertions, lifecycle annotations, tagging, and Mockito integration.

Changes:

  • Migrates many hbase-server unit/integration tests from JUnit 4 (@Before/@After, @Category, Rules) to JUnit 5 (@BeforeEach/@AfterEach, @Tag, extensions, Jupiter assertions).
  • Updates Mockito usage to better align with JUnit 5 (e.g., MockitoExtension) and modern exception assertions (assertThrows).
  • Updates hbase-server test dependency from mockito-core to mockito-junit-jupiter.

Reviewed changes

Copilot reviewed 66 out of 66 changed files in this pull request and generated 4 comments.

Show a summary per file
File Description
hbase-server/src/test/java/org/apache/hadoop/hbase/master/snapshot/TestTakeSnapshotHandler.java JUnit 5 migration (Jupiter assertions, @BeforeEach/@AfterEach, @Tag, TestInfo for names)
hbase-server/src/test/java/org/apache/hadoop/hbase/master/snapshot/TestSnapshotStats.java JUnit 5 migration (@Tag, lifecycle, TestInfo naming)
hbase-server/src/test/java/org/apache/hadoop/hbase/master/snapshot/TestSnapshotManager.java JUnit 5 migration; inject TestInfo into tests and update assertion signatures
hbase-server/src/test/java/org/apache/hadoop/hbase/master/snapshot/TestSnapshotHFileCleaner.java JUnit 5 migration (@Tag, Jupiter lifecycle, TestInfo)
hbase-server/src/test/java/org/apache/hadoop/hbase/master/snapshot/TestSnapshotFileCacheWithDifferentWorkingDir.java JUnit 5 migration (@BeforeAll/@AfterAll, @Tag)
hbase-server/src/test/java/org/apache/hadoop/hbase/master/snapshot/TestSnapshotFileCache.java JUnit 5 migration (lifecycle, @Tag, updated assertions)
hbase-server/src/test/java/org/apache/hadoop/hbase/master/snapshot/TestSnapshotCleanupStateStore.java JUnit 5 migration (@AfterEach, @Tag)
hbase-server/src/test/java/org/apache/hadoop/hbase/master/region/TestMasterRegionWALSyncTimeoutIOException.java JUnit 5 migration (assertThrows, @Tag)
hbase-server/src/test/java/org/apache/hadoop/hbase/master/region/TestMasterRegionWALRecovery.java JUnit 5 migration (@Tag, Jupiter assertions)
hbase-server/src/test/java/org/apache/hadoop/hbase/master/region/TestMasterRegionWALCleaner.java JUnit 5 migration (@Tag, Jupiter assertions)
hbase-server/src/test/java/org/apache/hadoop/hbase/master/region/TestMasterRegionRpcTimeout.java JUnit 5 migration (@Tag, Jupiter assertions)
hbase-server/src/test/java/org/apache/hadoop/hbase/master/region/TestMasterRegionOnTwoFileSystems.java Partial JUnit 5 migration (teardown annotation changed)
hbase-server/src/test/java/org/apache/hadoop/hbase/master/region/TestMasterRegionInitialize.java JUnit 5 migration (@Tag, Jupiter assertions)
hbase-server/src/test/java/org/apache/hadoop/hbase/master/region/TestMasterRegionFlush.java JUnit 5 migration; updates mocking of flush result for compatibility
hbase-server/src/test/java/org/apache/hadoop/hbase/master/region/TestMasterRegionCompaction.java JUnit 5 migration (@Tag, Jupiter assertions)
hbase-server/src/test/java/org/apache/hadoop/hbase/master/region/TestChangeSFTForMasterRegion.java JUnit 5 migration (@BeforeAll/@AfterAll, @Tag)
hbase-server/src/test/java/org/apache/hadoop/hbase/master/region/MasterRegionTestBase.java Migrates base test lifecycle to JUnit 5 (@BeforeEach/@AfterEach)
hbase-server/src/test/java/org/apache/hadoop/hbase/master/normalizer/TestSimpleRegionNormalizerOnCluster.java JUnit 5 migration; TestInfo used for generated table names
hbase-server/src/test/java/org/apache/hadoop/hbase/master/normalizer/TestSimpleRegionNormalizer.java JUnit 5 migration; replaces TableNameTestRule with TestInfo-derived names
hbase-server/src/test/java/org/apache/hadoop/hbase/master/normalizer/TestRegionNormalizerWorker.java JUnit 5 + Mockito Jupiter extension migration
hbase-server/src/test/java/org/apache/hadoop/hbase/master/normalizer/TestRegionNormalizerWorkQueue.java JUnit 5 migration (@Tag, Jupiter assertions)
hbase-server/src/test/java/org/apache/hadoop/hbase/master/normalizer/TestRegionNormalizerStateStore.java JUnit 5 migration (@AfterEach, @Tag)
hbase-server/src/test/java/org/apache/hadoop/hbase/master/normalizer/TestRegionNormalizerManagerConfigurationObserver.java JUnit 5 migration (@BeforeEach, @Tag)
hbase-server/src/test/java/org/apache/hadoop/hbase/master/migrate/TestInitializeStoreFileTracker.java JUnit 5 migration; use Jupiter assertNotNull
hbase-server/src/test/java/org/apache/hadoop/hbase/master/locking/TestLockProcedure.java JUnit 5 migration; replaces ExpectedException with assertThrows + Hamcrest
hbase-server/src/test/java/org/apache/hadoop/hbase/master/locking/TestLockManager.java JUnit 5 migration (@BeforeAll/@AfterAll/@AfterEach, @Tag)
hbase-server/src/test/java/org/apache/hadoop/hbase/master/janitor/TestMetaFixerNoCluster.java JUnit 5 migration (@Tag, Jupiter assertions)
hbase-server/src/test/java/org/apache/hadoop/hbase/master/janitor/TestMetaFixer.java JUnit 5 migration; uses TestInfo for per-test table names
hbase-server/src/test/java/org/apache/hadoop/hbase/master/janitor/TestCatalogJanitorInMemoryStates.java JUnit 5 migration; uses TestInfo instead of TableNameTestRule
hbase-server/src/test/java/org/apache/hadoop/hbase/master/janitor/TestCatalogJanitorCluster.java JUnit 5 migration (@BeforeEach/@AfterEach, @Tag)
hbase-server/src/test/java/org/apache/hadoop/hbase/master/janitor/TestCatalogJanitor.java JUnit 5 migration; replaces TestName rule with TestInfo
hbase-server/src/test/java/org/apache/hadoop/hbase/master/http/gson/GsonFactoryTest.java JUnit 5 migration (@BeforeAll, @Tag)
hbase-server/src/test/java/org/apache/hadoop/hbase/master/http/TestRegionVisualizer.java JUnit 5 migration (@BeforeAll, @Tag)
hbase-server/src/test/java/org/apache/hadoop/hbase/master/http/TestMetaBrowserNoCluster.java JUnit 5 migration (@BeforeEach, @Tag, Mockito init updated)
hbase-server/src/test/java/org/apache/hadoop/hbase/master/http/TestMetaBrowser.java JUnit 5 migration replacing Rules with Jupiter extensions; adds explicit cleanup of tables/namespaces
hbase-server/src/test/java/org/apache/hadoop/hbase/master/http/TestMasterStatusUtil.java JUnit 5 migration (@BeforeEach, @Tag)
hbase-server/src/test/java/org/apache/hadoop/hbase/master/http/TestMasterStatusPage.java JUnit 5 migration (@BeforeAll/@AfterAll, @Tag)
hbase-server/src/test/java/org/apache/hadoop/hbase/master/http/TestHbckMetricsResource.java JUnit 5 migration replacing RuleChain with Jupiter extensions/callbacks
hbase-server/src/test/java/org/apache/hadoop/hbase/master/http/TestApiV1ClusterMetricsResource.java JUnit 5 migration replacing RuleChain with Jupiter extensions/callbacks
hbase-server/src/test/java/org/apache/hadoop/hbase/master/cleaner/TestSnapshotFromMaster.java JUnit 5 migration (@BeforeAll/@AfterAll/@BeforeEach/@AfterEach, @Tag)
hbase-server/src/test/java/org/apache/hadoop/hbase/master/cleaner/TestSnapshotCleanerChore.java JUnit 5 migration (@Tag)
hbase-server/src/test/java/org/apache/hadoop/hbase/master/cleaner/TestReplicationHFileCleaner.java JUnit 5 migration (@BeforeAll/@AfterAll/@BeforeEach/@AfterEach, @Tag)
hbase-server/src/test/java/org/apache/hadoop/hbase/master/cleaner/TestReplicationBarrierCleaner.java JUnit 5 migration; also fixes logger class reference
hbase-server/src/test/java/org/apache/hadoop/hbase/master/cleaner/TestLogsCleaner.java JUnit 5 migration; replaces TableNameTestRule usage with TestInfo naming
hbase-server/src/test/java/org/apache/hadoop/hbase/master/cleaner/TestHFileLinkCleaner.java JUnit 5 migration; replaces TestName rule with TestInfo naming
hbase-server/src/test/java/org/apache/hadoop/hbase/master/cleaner/TestHFileCleaner.java JUnit 5 migration; updates assertions and array equality usage
hbase-server/src/test/java/org/apache/hadoop/hbase/master/cleaner/TestCleanerClearHFiles.java JUnit 5 migration (@BeforeAll/@AfterAll, @Tag)
hbase-server/src/test/java/org/apache/hadoop/hbase/master/cleaner/TestCleanerChore.java JUnit 5 migration (@BeforeAll/@AfterAll, @Tag, Jupiter assertions)
hbase-server/src/test/java/org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancerHeterogeneousCostRulesLoadFromHDFS.java JUnit 5 migration (@BeforeEach/@AfterEach, @Tag)
hbase-server/src/test/java/org/apache/hadoop/hbase/master/balancer/TestStochasticBalancerJmxMetrics.java JUnit 5 migration; converts ignore/fix-order to @Disabled + @TestMethodOrder
hbase-server/src/test/java/org/apache/hadoop/hbase/master/balancer/TestReplicaDistributionBalancerConditional.java JUnit 5 migration (@BeforeEach/@AfterEach, @Tag)
hbase-server/src/test/java/org/apache/hadoop/hbase/master/balancer/TestRSGroupBasedLoadBalancerWithStochasticLoadBalancerAsInternal.java JUnit 5 migration (@BeforeAll, @Tag)
hbase-server/src/test/java/org/apache/hadoop/hbase/master/balancer/TestRSGroupBasedLoadBalancerWithCacheAwareLoadBalancerAsInternal.java JUnit 5 migration; replaces JUnit4 timeout with Jupiter @Timeout
hbase-server/src/test/java/org/apache/hadoop/hbase/master/balancer/TestRSGroupBasedLoadBalancer.java JUnit 5 migration (@BeforeAll, @Tag)
hbase-server/src/test/java/org/apache/hadoop/hbase/master/balancer/TestMetaTableIsolationBalancerConditional.java JUnit 5 migration (@BeforeEach/@AfterEach, @Tag)
hbase-server/src/test/java/org/apache/hadoop/hbase/master/balancer/TestLoadBalancerStateStore.java JUnit 5 migration (@AfterEach, @Tag)
hbase-server/src/test/java/org/apache/hadoop/hbase/master/balancer/TestFavoredStochasticLoadBalancer.java JUnit 5 migration; converts ignored tests to @Disabled
hbase-server/src/test/java/org/apache/hadoop/hbase/master/balancer/TestFavoredStochasticBalancerPickers.java JUnit 5 migration; uses TestInfo naming
hbase-server/src/test/java/org/apache/hadoop/hbase/master/balancer/TestFavoredNodeTableImport.java JUnit 5 migration (@AfterEach, @Tag)
hbase-server/src/test/java/org/apache/hadoop/hbase/master/balancer/TestCacheAwareLoadBalancer.java JUnit 5 migration (@BeforeAll, @Tag)
hbase-server/src/test/java/org/apache/hadoop/hbase/master/balancer/TestBalancerStatusTagInJMXMetrics.java JUnit 5 migration; updates tags and assertion argument order
hbase-server/src/test/java/org/apache/hadoop/hbase/master/balancer/RSGroupableBalancerTestBase.java Mockito/JUnit 5 cleanup and refactors; replaces verbose Mockito usage with static imports
hbase-server/src/test/java/org/apache/hadoop/hbase/master/balancer/BalancerConditionalsTestUtil.java JUnit 5 migration; updates assertion signatures
hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestSplitOrMergeStateStore.java JUnit 5 migration (@AfterEach, @Tag)
hbase-server/src/test/java/org/apache/hadoop/hbase/master/MasterStateStoreTestBase.java JUnit 5 migration (@BeforeAll/@AfterAll)
hbase-server/pom.xml Switches test dependency from mockito-core to mockito-junit-jupiter

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines 59 to 149
@@ -144,7 +144,7 @@ public void setUpBeforeTest() throws IOException {
ServerName.valueOf("localhost", 12345, EnvironmentEdgeManager.currentTime()));
}

@After
@AfterEach
public void tearDownAfterTest() {
region.close(true);
Copy link

Copilot AI Mar 20, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This class now uses JUnit Jupiter's @AfterEach but still appears to rely on JUnit 4 annotations/imports elsewhere (e.g., org.junit.Before, @Category, etc.). Mixing JUnit 4 and JUnit 5 lifecycle annotations can result in setup/teardown methods not running (depending on which engine executes the test). Please migrate the remaining JUnit 4 annotations to JUnit Jupiter equivalents (e.g., @BeforeEach, @AfterAll, @Tag) or keep the class purely JUnit 4 (use @After).

Copilot uses AI. Check for mistakes.
Comment on lines 397 to 401
containsString(regionId), containsString(tableName), containsString(serverName),
containsString(serverName), containsString(port), containsString(startCode),
containsString(metaRegionID), containsString(metaTableName), containsString(localhost1),
containsString(localhost2), containsString(port), containsString(startCode)));
containsString(localhost2), containsString(port), containsString(hostStartCode)));
}
Copy link

Copilot AI Mar 20, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The test method for the JSON response is still named testGetUnkownServers (typo: missing 'n' in 'Unknown'). Consider renaming it to testGetUnknownServers for consistency with the HTML variant and to improve readability/searchability.

Copilot uses AI. Check for mistakes.
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.mockito.Mockito.any;
Copy link

Copilot AI Mar 20, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

import static org.mockito.Mockito.any; is not the correct matcher import (matchers live under org.mockito.ArgumentMatchers). This will not compile and also makes the intent less clear. Switch the static import to org.mockito.ArgumentMatchers.any (or use anyString/any(Class) as appropriate).

Suggested change
import static org.mockito.Mockito.any;
import static org.mockito.ArgumentMatchers.any;

Copilot uses AI. Check for mistakes.
Comment on lines +92 to 96
@BeforeEach
public void before(TestInfo testInfo) throws Exception {
MockitoAnnotations.openMocks(this);
when(masterServices.skipRegionManagementAction(any())).thenReturn(false);
testingUtility = new HBaseCommonTestingUtil();
Copy link

Copilot AI Mar 20, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This test uses @ExtendWith(MockitoExtension.class) but also calls MockitoAnnotations.openMocks(this) in @BeforeEach. That creates a second Mockito session and reinitializes the @Mock fields, which can lead to confusing behavior and unnecessary resources. Remove the manual openMocks call and let MockitoExtension manage mock initialization (or drop the extension and keep manual initialization, but not both).

Copilot uses AI. Check for mistakes.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants